package com.itheima.aspect;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

//1,定义类，定义方法，抽取公共的代码
@Aspect
@Component
@Slf4j
public class RecordTimeAspect {

    //2.定义方法，抽取公共的代码
    @Around("execution(* com.itheima.service.impl.DeptServiceImpl.*(..))")//3.定位需要耗时统计的目标方法
    public Object recordTime(ProceedingJoinPoint joinPoint/*代码目标方法*/) throws Throwable{
        //记录开始时间-公共代码
        long start = System.currentTimeMillis();
        //执行目标方法
        Object result = joinPoint.proceed();
        //记录结束时间-公共代码
        long end = System.currentTimeMillis();

        //计算方法执行时长
        long time = end - start;
        //获取方法名
        String methodName = joinPoint.getSignature().getName();
        //获取类名
        String className = joinPoint.getTarget().getClass().getName();

        log.info("{}类{}方法执行时长为：{}毫秒",className,methodName,time);
        return result;//原样返回
    }
}
